热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

都会|管理模式_DM8数据库模式对象管理

篇首语:本文由编程笔记#小编为大家整理,主要介绍了DM8数据库模式对象管理相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了DM8数据库模式对象管理相关的知识,希望对你有一定的参考价值。



管理模式

模式与用户之间的关系:

模式定义:模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干

对象的对象集

模式对象: 表、视图、约束、索引、序列、触发器、存储过程/函数、包、同

义词、类、域

模式与用户之间的关系:

当系统建立一个用户时,会自动生成一个同名的模式

用户还可以建立其他模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式,

一个模式仅能归属于一个用户。Oracle 中用户和模式是一对一的关系。

关于达梦模式和用户的关系,可以查看达梦社区贴:

对达梦数据库用户和模式的理解 | 达梦技术社区 (dameng.com)

select * from SYSOBJECTS t where t."TYPE$" =SCH; --查看模式

select * from SYSOBJECTS t where t."SUBTYPE$" =USER; --查看用户

--查询模式和用户的对应关系:

select a.id scheid, a.name schename, b.id userid, b.name username

from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b

where a."TYPE$" = SCH and a.pid = b.id;

模式管理

--创建模式

create schema hrtest01 AUTHORIZATION HRTEST;

create table hrtest01.t_test(id int, name varchar(20));

--查看当前模式和当前用户

select sys_context(USERENV,CURRENT_SCHEMA);

select sys_context(USERENV,CURRENT_USER); 或 select user;

--切换模式(仅对当前会话生效)

set SCHEMA dmhr;

[dmdba@KylinDCA03 ~]$ disql sysdba/Dameng123

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间 : 1.497(ms)

disql V8

SQL> select sys_context(USERENV,CURRENT_SCHEMA);

行号 SYS_CONTEXT(USERENV,CURRENT_SCHEMA)

---------- ---------------------------------------

1 SYSDBA

已用时间: 1.471(毫秒). 执行号:2100.

SQL> set schema dmhr;

操作已执行

已用时间: 1.039(毫秒). 执行号:0.

SQL> select sys_context(USERENV,CURRENT_SCHEMA);

行号 SYS_CONTEXT(USERENV,CURRENT_SCHEMA)

---------- ---------------------------------------

1 DMHR

DM8数据库模式对象管理_创建表

--删除模式

drop SCHEMA IF EXISTS HRTEST01;

drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎用。

DM8数据库模式对象管理_sql_02

管理表

表包含:索引组织表、堆表、分区表、HUGE 列存储表、外部表、临时表。

DM 默认创建的是索引组织表,Oracle 默认创建的是堆表。

索引组织表和堆表的区别:

索引组织表:有且仅有一个聚簇索引键,表数据按照聚簇索引键排序(数据是有序的,插入有序),如果在创建表时未指定聚簇索引键,默认使用 rowid 为聚簇索引键。rowid 是逻辑rowid,占用存储空间,所以索引组织表比堆表占用较多空间。

堆表:数据是无序的,插入无序,堆表插入效率较高,rowid 是物理 rowid,不占用存储空间。所以堆表比索引组织表节约空间。

对聚簇索引键的范围查询,索引组织表更高效。

DM 默认创建的索引组织表,由参数 LIST_TABLE 指定。

select * from v$parameter t where name =LIST_TABLE;

DM 创建表时如果指定了主键,则主键为聚簇索引键(部分版本是这样,由参数

PK_WITH_CLUSTER 指定);如果创建表示未指定主键,则 rowid 为聚簇索引键;

select * from v$parameter t where name =PK_WITH_CLUSTER;

SQL 管理表

创建表:

create table hrtest.t_testpid(

pid int,

pname varchar(20),

sex bit,

logtime datetime)

TABLESPACE dmtbs;

CTAS方式创建表:

create table t_emp01 as select * from dmhr.employee;

create table t_emp02 like dmhr.employee;

create table t_emp03 as select * from dmhr.employee where 1=0;

--使用CREATE table as创建表时,默认不会复制表的约束信息,由参数

CTAB_SEL_WITH_CONS指定:

select * from SYS."V$PARAMETER" t where t.name like CTAB_SEL_WITH_CONS%;

添加字段:

alter table hrtest.t_testpid add column email varchar(20);

修改字段类型:

alter table hrtest.t_testpid modify email varchar(50);

删除字段:

alter table hrtest.t_testpid drop logtime;

对字段添加默认值(大表不建议添加字段时给默认值,耗时很长):

alter table hrtest.t_testpid add column logtime datetime default sysdate;

重命名表或字段:

alter table t_test rename to t_testoa;

alter table t_testoa rename column id to pid;

数据字典:

select * from dba_tables t where t.owner=HRTEST;

select * from dba_tab_columns t where t.owner=HRTEST;

select t.TABLE_NAME, t.TABLESPACE_NAME from user_tables t;

select t.TABLE_NAME, t.COLUMN_NAME, t.NULLABLE from USER_TAB_COLS t;

对表和字段添加注释:

comment on column t_testpid.sex is sex. 0:female 1: male;

comment on table t_testpid is this is a test table;

select * from user_tab_comments;

select * from user_col_comments;

修改表的表空间(DM 会自动重建该表上的索引)

alter table hrtest.T_TESTPID move tablespace main;

select * from dba_tables t where t.TABLE_NAME like T_TEST%;

数据的导入

DM 在 DISQL 下用 start 或`都可以, Oracle 用@:

SQL> start /dm8/backup/dts/t_department.sql

SQL> `/dm8/backup/dts/t_department.sql

或者 disql 可以直接调用脚本:

[dmdba@KylinDCA04 backup]$ disql hr/"Dameng@123" `city.sql

可以关闭回显以提高导入效率:

SQL> set TIMING off;

SQL> set FEEDback off;

SQL> set echo off;

DM8数据库模式对象管理_sql_03

DM 管理工具只能使用`, `后面的文件路径不能有空格,导入后需要手工 commit;

/dm8/backup/dts/t_department.sql

DM 管理工具创建表

DM 管理工具上创建表

DM8数据库模式对象管理_聚簇索引_04

注意,客户端操作区分大小写,建议统一使用大写。否则,使用时,小写需要加双引号。

DM8数据库模式对象管理_创建表_05

管理约束

约束类型:

NOT NULL:非空约束

UNIQUE:唯一约束

PRIMARY KEY:主键约束 (唯一约束+非空约束)

FOREIGN KEY:外键约束

CHECK:检验约束

SQL 管理约束

非空约束

alter table hrtest.t_testpid modify pname not null;

唯一约束

alter table hrtest.t_testpid add CONSTRAINT uk_testpid_email unique (email);

主键约束

alter table hrtest.t_testpid ADD CONSTRAINT pk_testpid_pid PRIMARY KEY(pid);

检验约束

alter table hrtest.t_testpid add salary number(10,2);

alter table

hrtest.t_testpid ADD CONSTRAINT ck_testpid_salary CHECK

(salary>=2100);

外键约束(外键引用两一张表的主键或者唯一键)

alter table hrtest.t_test add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES

hrtest.t_testpid(pid);

--约束的禁用和启用、删除

alter table hrtest.t_test disable CONSTRAINT fk_test_id;

alter table hrtest.t_test enable CONSTRAINT fk_test_id;

alter table hrtest.t_test drop CONSTRAINT fk_test_id;

SQL> desc t_testpid;

行号 NAME TYPE$ NULLABLE

---------- ------- ----------- --------

1 PID INTEGER N

2 PNAME VARCHAR(20) N

3 SEX BIT Y

4 EMAIL VARCHAR(50) Y

5 LOGTIME DATETIME(6) Y

6 SALARY DEC(10, 2) Y

6 rows got

已用时间: 8.086(毫秒). 执行号:2801.

SQL> insert into t_testpid(pid, pname, sex, email, salary) values(1, test, 0, test@qq.com, 2300);

影响行数 1

已用时间: 0.812(毫秒). 执行号:2802.

SQL> insert into t_testpid(pid, pname, sex, email, salary) values(1,test, 0, test@qq.com, 2300);

insert into t_testpid(pid, pname, sex, email, salary) values(1,test, 0, test@qq.com, 2300);

[-6602]:违反表[T_TESTPID]唯一性约束.

已用时间: 0.721(毫秒). 执行号:0.

SQL> insert into t_testpid(pid, pname, sex, email, salary) values(2, null, 0, 123@qq.com, 2300);

insert into t_testpid(pid, pname, sex, email, salary) values(2, null, 0, 123@qq.com, 2300);

[-6609]:违反列[PNAME]非空约束.

已用时间: 0.651(毫秒). 执行号:0.

SQL> insert into t_testpid(pid, pname, sex, email, salary) values(2, 123, 0, test@qq.com, 2300);

insert into t_testpid(pid, pname, sex, email, salary) values(2, 123, 0, test@qq.com, 2300);

[-6602]:违反表[T_TESTPID]唯一性约束.

已用时间: 0.747(毫秒). 执行号:0

​SQL> insert into t_testpid(pid, pname, sex, email, salary) values(2, 123, 0, 123@qq.com, 2300);

影响行数 1

已用时间: 0.610(毫秒). 执行号:2806.

SQL> insert into t_testpid(pid, pname, sex, email, salary) values(3, ccc,0,ccc@qq.com,2000);

insert into t_testpid(pid, pname, sex, email, salary) values(3, ccc,0,ccc@qq.com,2000);

[-6604]:违反 CHECK 约束[CK_TESTPID_SALARY].

已用时间: 0.757(毫秒). 执行号:0.

DM8数据库模式对象管理_sql_06

相关数据字典:

select * from dba_constraints t where t.owner=HRTEST;

select * from DBA_CONS_COLUMNS t where t.owner=HRTEST;

DM8数据库模式对象管理_聚簇索引_07

批量禁用外键约束:

select alter table ||owner||.||table_name|| disable constraint || t.CONSTRAINT_NAME ||;

from DBA_CONSTRAINTS t

where t.OWNER =DMTEST and t.CONSTRAINT_TYPE = R;

DM 管理工具管理约束

可以在创建表是指定约束信息,也可以表创建完成后添加约束。

DM8数据库模式对象管理_sql_08

DM8数据库模式对象管理_sql_09

DM8数据库模式对象管理_sql_10

DM8数据库模式对象管理_sql_11

管理索引

索引类型包含:聚簇索引、二级索引、函数索引、位图索引(主要用于 OLAP 系统)、位图连接索引、全文索引、组合索引等。

索引:二级索引(B 树索引),索引的存在是为了提高查询速度。索引存放的是索引列值、聚簇索引键和 rowid。

一种数据库对象,通过指针加速查询速度,通过快速定位数据的方法,减少磁盘 I/O。

索引特点:索引与表相互独立,索引占用存储空间(如果一个表越大,其索引也会越来越大),索引相当于一个小表,索引是有序的(按照索引字段排序),在查询时服务器自动使用索引,DML

操作时自动维护索引。

索引的优点:提高查询性能、减少排序。

索引的缺点:索引不是越多越好,索引会降低 DML 的效率(DML 操作需要维护索引)。

组合索引创建时要注意索引列的顺序(一般经常查询的列放在前面,等值查询列放在前面)。

SQL 管理索引

explain select * from hrtest.t_emp01 t where T.EMPLOYEE_NAME = 马学铭;

create index ix_emp01_employeename ON HRTEST.T_EMP01(EMPLOYEE_NAME);

DM8数据库模式对象管理_sql_12

create table t_EMP like DMHR.EMPLOYEE;

create index ix_emp_employeename ON T_EMP(EMPLOYEE_NAME);

DM8数据库模式对象管理_创建表_13

DM8数据库模式对象管理_创建表_14

DM8数据库模式对象管理_sql_15

统计信息的收集:

dbms_stats.gather_table_stats(HRTEST,T_EMP01);

DM8数据库模式对象管理_创建表_16

统计信息的查看:

dbms_stats.table_stats_show(HRTEST,T_EMP01);

dbms_stats.index_stats_show(HRTEST,IX_EMP01_EMPLOYEENAME);

DM8数据库模式对象管理_聚簇索引_17

索引的监控:

alter index HRTEST.IX_EMP01_EMPLOYEENAME MONITORING USAGE; --开启索引监控

alter index HRTEST.IX_EMP01_EMPLOYEENAME NOMONITORING USAGE; --关闭索引监控

select * from v$object_usage; --查看索引的监控信息

DM8数据库模式对象管理_创建表_18

索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):

alter index HRTEST.IX_EMP01_EMPLOYEENAME rebuild ONLINE;

索引的数据字典:

select * from dba_indexes t where t.OWNER =HRTEST;

select * from dba_ind_columns t where t.index_OWNER =HRTEST;

删除索引:

drop index HRTEST.ix_emp01_employeename;

DM 管理工具创建索引

DM8数据库模式对象管理_聚簇索引_19

管理视图

普通视图(物化视图除外)中不包含数据,数据来源于基表。视图提供一个查询窗口。

​从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据

从数据库系统内部来看,一个视图是由 SELECT 语句组成的查询定义的虚拟表

简单视图:单表查询,不包含聚合函数、group by 等。一般可以支持 DML 操作,对视图的

DML 操作都会转化为对基表的 DML 操作,DML 操作要满足基表的约束条件。

复杂视图:多表连接,包含聚合函数、group by 等。一般不支持增删改操作。

create view hrtest.v_emp

as

select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM

from dmhr.employee a

where a.DEPARTMENT_ID = 1001;

create or REPLACE view hrtest.v_emp

as

select a.EMPLOYEE_ID, a.EMPLOYEE_NAME, a.EMAIL, a.PHONE_NUM, a.SALARY

from dmhr.employee a

where a.DEPARTMENT_ID = 1001;

select * from hrtest.v_emp ;

创建复杂视图:

create or REPLACE view hrtest.v_emp_salary

as

select a.DEPARTMENT_ID, sum(A.SALARY) SUM_SALARY

from dmhr.employee a

group by a.DEPARTMENT_ID

having sum(A.SALARY) > 100000;

select * from hrtest.v_emp_salary ;

create or REPLACE view v_empnum

as select t.DEPARTMENT_ID, count(*) empnum

from t_emp01 t

group by t.DEPARTMENT_ID

推荐阅读
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文基于最新版SQLite 3.33.0(发布于2020年8月20日),详细介绍如何使用ORDER BY语句进行数据排序,包括单列和多列排序的方法。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文深入探讨了MySQL中的高级特性,包括索引机制、锁的使用及管理、以及如何利用慢查询日志优化性能。适合有一定MySQL基础的读者进一步提升技能。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
author-avatar
大盗哈喽小马甲_943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有